<?php

require './configs/config.php';

// 自动加载类
function mvc_autoload($classname)
{
    // echo $classname;
    if (file_exists("./models/{$classname}.class.php")) {
        require "./models/{$classname}.class.php";
    } elseif (file_exists("./controllers/{$classname}.php")) {
        require "./controllers/{$classname}.php";
    } else {
        header('HTTP/1.0 404 not found');
        echo '<h1>404 NOT FOUND-入口文件</h1>';
        exit;
    }
}

// 导入smarty模版引擎
require './libs/Smarty.class.php';
// 注册给定的函数作为 __autoload 的实现
spl_autoload_register('mvc_autoload');

// 处理URL
// var_dump($_SERVER['PATH_INFO']);
if (!empty($_SERVER['PATH_INFO']) && $_SERVER['PATH_INFO'] != '/') {
    // 提取出 除了伪静态后缀 之外的内容
    $pathinfo = trim(str_replace('.html', '', $_SERVER['PATH_INFO']), '/');
    // var_dump($pathinfo);
    // 将以上按'/' 切割为数组
    $mathes = explode('/', $pathinfo);
    // var_dump($mathes);
    $_GET['c'] = $mathes[0]; // 数组0下标为控制器名
    $_GET['a'] = empty($mathes[1])?'':$mathes[1];// 数组1下标为操作名

    // 如果数组成员个数大于2个,则处理其中的参数(如id/5)
    if (count($mathes) > 2) {
        for ($i = 2; $i < count($mathes); $i += 2) {
            // 如果是单数的参数,则跳过不处理(如:只传递 user/del/id)
            if (empty($mathes[$i + 1])) {
                continue;
            }
            $_GET[$mathes[$i]] = $mathes[$i+1];
        }
    }
}

// PATH的生成
// 获取当前入口文件所在目录的绝对路径
$path = dirname(__FILE__);
// 将绝对路径改装成一个路径常量
// PATH值用于填写路径值:require/路径文件/增删文件路径
define('PATH',str_replace('\\','/',$path).'/');
// var_dump(PATH);

// URL的拼接
// 拼装 协议://域名
$url = $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['SERVER_NAME'];
// 取出 当前脚本所在文档的根目录
$dir = $_SERVER['DOCUMENT_ROOT'];
// 进行拼装,把PATH中的项目目录之前的部分,替换成域名的形式
$url = str_replace($dir,$url,PATH);
// 将组装完成的url地址设置为常量
// URL用于:a链接跳转/引用css/js/img/meta等标签处
define('URL',$url);
// var_dump(URL);

// 获取用户的参数
// 获取控制器名
$c = (!empty($_GET['c'])) ? $_GET['c'] : 'Index';
// 获取方法名
$a = (!empty($_GET['a'])) ? $_GET['a'] : 'index';

// 拼接类名
$classname = $c . 'Controller';
// 实例化控制器
$constroller = new $classname();

// 调用方法
$constroller->$a();



